草庐IT

c++ - constexpr 和 ODR

全部标签

c++ - 为什么 boost.geometry.index.rtree 比 superliminal.RTree 慢

我测试了boost.geometry.index.rtree(boost1.59www.boost.org)和superliminal.RTree(http://superliminal.com/sources/sources.htm#C_Code)。令我惊讶的是,superliminal.RTree比boost.geometry.index.rtree更快。环境设置将相同的空间索引数据添加到superliminal.RTree和boost.geometry.index.rtree对象。测试相同的空间索引查询100次并获得消耗的时间。GCC版本是“gccversion4.4.62011

c++ - 为什么 "%I64d"在同一格式字符串中多次使用时会给出奇怪的输出?

当我在codeforces上解决一个编程问题时,我发现当格式说明符“%I64d”在同一格式字符串中被多次使用时,例如:longlonginta,b,c;a=1,b=3,c=5;printf("%I64d%I64d%I64d\n",a,b,c);输出是103然而,当我将每个说明符分开时,例如:longlonginta,b,c;a=1,b=3,c=5;printf("%I64d",a);printf("%I64d",b);printf("%I64d",c);puts("");输出如预期的那样:135这是查看上述代码片段的ideone链接:http://ideone.com/f2udRB请帮

c++ - 如何有效地检测 4 个整数变量的对称性?

我想在4个整数变量i,j,k和l中找到对称性。对称性是:所有四个数字都相等:XXXX,三个数字相等:XXXY,XXYX,XYXX,YXXX两对相等的数字:XXYY,XYXY,XYYX,...一对相等的数字和两个不同的数字:XXYZ,XYXZ,XYZX,...所有数字都不同。所有变量都在某个非连续范围内运行。我使用嵌套的ifelse语句。第一个if检查所有变量的不平等。如果不是,那么我有情况1。下一个if检查是否有任何相等的对。如果不是,则情况5。下一个if检查三个相等的数字。如果为真,则情况2。否则,最后一个if检查两对相等的数字。如果为真,则情况3,否则情况4。if(!(i==j&&

c++ - 在包含 float 的结构上使用 memset()

在一个C/C++混合项目中,我发现了一些我可以简化为的代码#includestructStructContainingDouble{doubled;///otherelementsomitted};voidclear(StructContainingDouble*p){memset(p,0,sizeof*p);}不停止Cppcheck以引发可移植性警告Usingmemset()onstructwhichcontainsafloatingpointnumber.消息是正确的,但是由于float被声明为double,所以它似乎是误报,因为在double中,(正)零值是按照IEEE754标准

c++ - 在控制台应用程序中包含 "help"消息的最佳方法是什么?

我正在编写一个控制台应用程序,它可以快速获取许多命令行参数和标志。出于这个原因,我希望用户能够访问这些标志的描述以及它们的用途。我能想到几种可能的解决方案我可以写一个README文件,然后把它放在与可执行文件相同的目录中。优点是简单便携,缺点是很容易被人删除/编辑文件。我可以将整个消息粘贴到程序中的一个变量中,并在用户键入mycmd--help或类似内容时将其打印到屏幕上。优点,保持可执行且不可编辑,缺点是代码,因为我会在下面float类似的东西。constchar[]helpmsg="Line1\n""Line2\n""...\n""LineN\n";我可以为我的程序编写一个man条

c++ - strdup() 和 strcpy

voidx(){strcpy(a,strdup(p));}(错误)用strdup分配,strcpy不释放谁能告诉我上面的语句有什么问题以及为什么会出现此错误? 最佳答案 问题是你正在泄漏内存。对strdup的调用分配未释放的内存。传递给strcpy的指向内存的指针永远不会保存在任何地方,因此编译器可以证明它已泄漏。我不确定您要做什么,因为strdup执行分配和复制,对strcpy的调用似乎是多余的。 关于c++-strdup()和strcpy,我们在StackOverflow上找到一个类

c++ - 为#define 使用变量

Libcurl使用以下定义电子邮件收件人:#defineRECIPIENT""但是如果我不想对收件人进行硬编码怎么办?我希望用户能够提供他/她自己的电子邮件地址,所以我需要找到一种方法来做到这一点:std::stringemailreceiver="bla@bla.com";#defineRECIPIENT=emailreceiver收件人用在这一行:rcpt_list=curl_slist_append(rcpt_list,RECIPIENT);我假设我不能简单地将其更改为std::stringemailreceiver="bla@bla.com";rcpt_list=curl_sl

c++ - 在 C/C++ DOS 中为文本着色的最简单方法?

我使用TurboC++3.0在DOS环境中制作了一个基本的贪吃蛇游戏,我自己也是一个菜鸟。我一直在寻找一种在DOS窗口中制作不同颜色文本的非常简单且可能是基本的方法。我不是在寻找复杂的文本着色方法。我正在编写的大多数程序都非常简单和基本,用复杂的代码为比程序本身更大的文本着色只会让人感到困惑和低效。我的问题是,用C和C++两种语言在DOS控制台中为文本着色的最简单方法是什么? 最佳答案 如果你enableansi.sys,您可以使用ansi转义序列。我假设您在Windows上使用DOS,因为您指的是“DOS窗口”,因此您需要先启用a

c++ - "<<"(双尖括号)在 C/C++ 枚举中是什么意思?

enumofp10_port_state{OFPPS10_STP_LISTEN=0 最佳答案 它是一个左移位运算符。这意味着它将位向左移动指定的位数:假设值为:0x0For000011110x0F在MicrosoftC++中,右移(>>)保留符号(或最重要的数字,最左边的数字)取决于数字是有符号还是无符号(假设一个字节的大小):signedinteger(anintforexample):0x80or100000000x80>>7=111111110x10or000100000x10>>4=00000001ifitsunsigned

c++ - 直观地解释指针及其意义?

我很难理解指针,尤其是函数指针,我希望有人能告诉我它们到底是什么以及它们应该如何在程序中使用。特别感谢C++中的代码块。谢谢。 最佳答案 indirection的概念理解这一点很重要。这里我们通过increment(x)传递值(注意创建和操作的是本地拷贝,而不是原始版本):在这里,通过increment(&x)指针(内存地址):请注意,引用与指针的工作方式类似,除了语法类似于值拷贝(obj.member)并且指针可以指向0(“空”指针)而引用必须指向非零内存地址。另一方面,函数指针让您可以像传递变量一样方便地传递和处理函数,从而在运